package com.chenjj.bigdata.hbase.client;

import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.filter.Filter;

import java.io.IOException;
import java.util.List;
import java.util.Map;


public interface HbaseClient {
	
	/**
	 * 向Hbase插入数据
	 * @param tableName 表名，如果有命名空间需要指定，例如 ns:t1
	 * @param rows 数据
	 */
    void put(String tableName, List<HbaseRow> rows) throws IOException;
	
	/**
	 * 向Hbase插入数据，并将索引写入Solr
	 * @param tableName 表名，如果有命名空间需要指定，例如 ns:t1
	 * @param rows 数据
	 * @param indexNames solr中Fields对应的name
	 */
    void put(String tableName, List<HbaseRow> rows, List<String> indexNames);

    /**
     * 加过滤条件的全表扫描
     * @param tableName  表名，如果有命名空间需要指定，例如 ns:t1
     * @param startRowkey 开始rowkey
     * @param stopRowkey 结束rowkey(不包含结束rowkey)
     * @param hc 列信息,如果为空则返回全部列
     * @param filter 过滤器
     * @return
     */
    List<Map<String, String>> scan(String tableName, String startRowkey, String stopRowkey, HbaseColumn[] hc, Filter filter) throws IOException;

    /**
     * 分页&加过滤条件的全表扫描
     * @param tableName  表名，如果有命名空间需要指定，例如 ns:t1
     * @param startRowkey 开始rowkey
     * @param stopRowkey 结束rowkey(不包含结束rowkey)
     * @param hc 列信息,如果为空则返回全部列
     * @param filter 过滤器
     * @param page 分页器，如果为null，则不分页
     * @return
     */
    List<Map<String, String>> scan(String tableName, String startRowkey, String stopRowkey, HbaseColumn[] hc, Filter filter,HBasePagination page) throws IOException;


    /**
	 * 全表扫描
	 * @param tableName 表名，如果有命名空间需要指定，例如 ns:t1
	 * @param startRowkey 开始rowkey
	 * @param stopRowkey 结束rowkey(不包含结束rowkey)
	 * @return
	 */
    List<Map<String, String>> scan(String tableName, String startRowkey, String stopRowkey) throws IOException;

    /**
     * 加过滤条件的全表扫描
     * @param tableName 表名，如果有命名空间需要指定，例如 ns:t1
     * @param startRowkey 开始rowkey
     * @param stopRowkey 结束rowkey(不包含结束rowkey)
     * @param filter 过滤器
     * @return
     */
    List<Map<String, String>> scan(String tableName, String startRowkey, String stopRowkey, Filter filter) throws IOException;

    /**
     * 根据rowkeys + filter返回指定数据集
     * @param tableName
     * @param rowkeys
     * @param hc 列信息,如果为空则返回全部列
     * @return
     */
    List<Map<String, String>> get(String tableName, List<String> rowkeys, HbaseColumn[] hc);

    /**
     * 根据rowkeys + filter返回指定数据集
     * @param tableName
     * @param rowkeys
     * @param hc 列信息,如果为空则返回全部列
     * @param filter 过滤器
     * @return
     */
    List<Map<String, String>> get(String tableName, List<String> rowkeys, HbaseColumn[] hc,Filter filter);

	/**
	 * 获取Hbase 连接
	 * @return
	 */
	Connection getConnection();

}
